import { proxy, useSnapshot } from 'valtio';

// 定义用户信息类型
export interface UserInfo {
  id: string | null;
  name: string | null;
  role: string | null;
}

// 定义用户状态类型
interface UserState {
  isLoggedIn: boolean;
  userInfo: UserInfo;
}

// 创建代理状态
export const userStore = proxy<UserState>({
  isLoggedIn: false,
  userInfo: {
    id: null,
    name: null,
    role: null,
  },
});

// 定义用户状态操作方法
export const userActions = {
  // 登录操作
  login(userData: { id: string; name: string; role: string }) {
    userStore.isLoggedIn = true;
    userStore.userInfo = userData;
  },

  // 登出操作
  logout() {
    userStore.isLoggedIn = false;
    userStore.userInfo = {
      id: null,
      name: null,
      role: null,
    };
  },

  // 更新用户信息
  updateUserInfo(userData: Partial<UserState['userInfo']>) {
    userStore.userInfo = {
      ...userStore.userInfo,
      ...userData,
    };
  },
};

// 创建自定义 Hook，便于组件使用
export const useUserStore = () => {
  const snapshot = useSnapshot(userStore);
  return {
    ...snapshot,
    ...userActions,
  };
};